package com.zoe.onelink.enhancer.scanner;

import com.google.common.collect.Lists;
import com.google.common.collect.Sets;
import org.springframework.core.type.filter.TypeFilter;

import java.util.Collection;
import java.util.Collections;
import java.util.List;
import java.util.Set;

/**
 * <p>标题: </p>
 * <p>描述: </p>
 * <p>版权: Copyright (c) 2021</p>
 * <p>公司: 智业软件股份有限公司</p>
 *
 * @version: 1.0
 * @author: ruansheng
 * @date: 2021-11-30
 */
public interface ClassScanner {

    Set<String> DEFAULT_PACKAGE_PATH = Sets.newHashSet("com.zoe");

    /**
     * 是否启用
     */
    default boolean isEnable() {
        return true;
    }

    /**
     * 包根路径
     */
    default Collection<String> baseScanPackages() {
        return DEFAULT_PACKAGE_PATH;
    }

    /**
     * 包含过滤器
     */
    default List<TypeFilter> getIncludeTypeFilters() {
        return Lists.newArrayList((metadataReader, metadataReaderFactory) -> true);
    }

    /**
     * 排除过滤器
     */
    default List<TypeFilter> getExcludeTypeFilters() {
        return Collections.emptyList();
    }

    /**
     * 调用
     *
     * @param classes 符合条件的类
     */
    void invoke(Set<? extends Class<?>> classes);

}
